#!/usr/bin/env python
#coding=utf-8
import os
import string
import glob
import psyco
psyco.full()

def FilterDirectory(FullPath,FileMask):    #筛选当前目录下的指定文件
    selectFile=[]
    for mask in FileMask:   
        FullName = FullPath+'\\'+mask
        for files in glob.glob(FullName):    #遍历目录文件
            if os.path.isfile(files):
                selectFile.append(files)
    return selectFile
    
    
def ListDirectory(FullPath,FileMask=['*.*'],minus= False,SubFold=False):#筛选文件,支持通配符 
#minus为ture列表减去符合filemask的文件,反之减去不符合mask文件(正则表达式),是否包含子目录
    FullPath.replace('\\','/')    #处理输入路径标准化
    #声明文件列表和目录列表
    file = []
    directory = [FullPath]
    #判断输入路径是否正确
    if not os.path.exists(FullPath):
        return file
    while directory:    #遍历目录
        FullPath = directory.pop()
        try:
            for dirs in os.listdir(FullPath):   #遍历目录
                FullName = os.path.join(FullPath,dirs)
                if os.path.isdir(FullName) and not os.path.islink(FullName) and SubFold :
                #判断是否为目录并且参数要求遍历子目录,如果是则添加到目录列表,以便继续循环遍历
                    directory.append(FullName)
            if minus == False:
                for tempString in FilterDirectory(FullPath,FileMask):    #添加文件到file列表
                    file.append(tempString)
            else:   #minus参数为True
                MinusFiles=[] #储存要去掉的文件列表
                AllFiles=[] #所有文件列表
                for files in os.listdir(FullPath):  #添加当前目录下所有文件到file列表
                    FullName = os.path.join(FullPath,files)
                    if os.path.isfile(FullName):
                        AllFiles.append(FullName)
                for tempString in FilterDirectory(FullPath,FileMask):    #添加文件到筛选列表
                    MinusFiles.append(tempString)
                    
                for selectFile in AllFiles:   #对比收有文件列表和筛选文件列表
                    FoundFile = False
                    for selectMaskFile in MinusFiles:
                        if selectFile == selectMaskFile:
                            FoundFile = True
                            break
                    if FoundFile == False:
                        file.append(selectFile)
                        
        except WindowsError:    #异常捕获因为权限目录不能读取
          print FullPath+' can not read' 
    return file
        
#path = raw_input('input browse path:  ')
#FileMask =['*.pnt','*.dbexport','*~']
#
#Showlist = ListDirectory('D:\\2009-06-23 MHW26 data',FileMask ,True,True)
#for i in Showlist:
#    print i
#print len(Showlist)
#print glob.glob('d:\test\\*.*'):
    
